﻿Public Class xtf_ABMdocumento

    Dim ulg_row As DataRow
    Dim obj_documento As cls_documento_ = Nothing
    Dim dtt_documentodetalle_ As DataTable
    Dim dtt_documentoalteracion_ As DataTable

    Public Sub New()
        InitializeComponent()
        Cargarcondicioniva()
        Cargarmoneda()

        chk_descrpcionmultilinea.Checked = False

        'Prepara datasource documentoalteracion----------------------------------------------------
        btn_alteracion_.Tag = New Collections.Generic.List(Of cls_documentoalteracion_)
        dtt_documentoalteracion_ = New DataTable
        dtt_documentoalteracion_.Columns.Add("Nombre", GetType(String))
        dtt_documentoalteracion_.Columns.Add("Tipo", GetType([Enum]))
        dtt_documentoalteracion_.Columns.Add("Formula", GetType(String))
        dtt_documentoalteracion_.Columns.Add("Total", GetType(Decimal))
        dtt_documentoalteracion_.Columns.Add("Objeto", GetType(Object))
        '-------------------------------------------------------------------------------------------------

        'Prepara grid y datasource proveedorarticulo----------------------------------------------------
        gdv_documentodetalle_.Tag = New Collections.Generic.List(Of cls_documentodetalle_)
        dtt_documentodetalle_ = New DataTable
        dtt_documentodetalle_.Columns.Add("idarticulo", GetType(Integer))
        'dtt_documentodetalle_.Columns.Add("cantidadMASK", GetType(Decimal))
        dtt_documentodetalle_.Columns.Add("codigo", GetType(String))
        dtt_documentodetalle_.Columns.Add("nombre", GetType(String))
        dtt_documentodetalle_.Columns.Add("cantidad", GetType(Decimal))
        dtt_documentodetalle_.Columns.Add("unidad", GetType(String))
        dtt_documentodetalle_.Columns.Add("valor", GetType(Decimal))
        dtt_documentodetalle_.Columns.Add("total", GetType(Decimal))
        'dtt_documentodetalle_.Columns.Add("valorMASK", GetType(String))
        'dtt_documentodetalle_.Columns.Add("totalMASK", GetType(String))
        dtt_documentodetalle_.Columns.Add("Objeto", GetType(Object))

        gdc_documentodetalle_.DataSource = dtt_documentodetalle_
        gdc_documentodetalle_.ForceInitialize()
        gdv_documentodetalle_.PopulateColumns()
        gdv_documentodetalle_.Columns("Objeto").Visible = False
        gdv_documentodetalle_.Columns("idarticulo").Visible = False

        'gdv_documentodetalle_.Columns("cantidad").Visible = False
        'gdv_documentodetalle_.Columns("valor").Visible = False
        'gdv_documentodetalle_.Columns("total").Visible = False

        'gdv_documentodetalle_.Columns("cantidadMASK").Caption = "cantidad"
        'gdv_documentodetalle_.Columns("valorMASK").Caption = "valor"
        'gdv_documentodetalle_.Columns("totalMASK").Caption = "total"

        gdv_documentodetalle_.Columns("cantidad").Width = NoVal_Cantidad.Width + 3
        gdv_documentodetalle_.Columns("codigo").Width = NoVal_Codigo.Width + 3
        gdv_documentodetalle_.Columns("nombre").Width = NoVal_nombremultilinea.Width
        gdv_documentodetalle_.Columns("valor").Width = NoVal_Valor.Width + 3
        gdv_documentodetalle_.Columns("total").Width = NoVal_Total.Width + 3
        gdv_documentodetalle_.Columns("unidad").Width = NoVal_UnidadDetalle.Width + 3
        gdv_documentodetalle_.Columns("nombre").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemMemoEdit
        '-----------------------------------------------------------------------------------------------
        Cargarunidaddetalle(Nothing)
        txt_documentotipo.Text = "Compra"
        dtp_Fecha.DateTime = Now
        cbo_tipo.SelectedIndex = 0
        AgregarValidaciones()
    End Sub

    Public Overrides Sub CargarObjetos()
        Cargarcondicioniva()
        Cargarmoneda()
    End Sub

    Private Sub Cargarcondicioniva()
        Dim tmp_obj As Object = Nothing
        If Not IsNothing(cbo_condicioniva.SelectedItem) Then
            tmp_obj = cbo_condicioniva.SelectedItem
        End If

        cbo_condicioniva.Properties.Items.Clear()
        Dim condicioniva_ As New cls_condicioniva_
        If condicioniva_.CargarTodos Then
            For Each condicioniva As cls_condicioniva_ In condicioniva_.Items
                cbo_condicioniva.Properties.Items.Add(condicioniva)
            Next
            cbo_condicioniva.SelectedIndex = 0
            cbo_condicioniva.Enabled = True

            If Not IsNothing(tmp_obj) Then
                For Each obj As cls_condicioniva_ In cbo_condicioniva.Properties.Items
                    If obj.idcondicioniva = tmp_obj.idcondicioniva Then
                        cbo_condicioniva.SelectedItem = obj
                        Exit For
                    End If
                Next
            End If

        Else
            cbo_condicioniva.SelectedItem = Nothing
            cbo_condicioniva.Enabled = False
        End If
    End Sub

    Private Sub Cargarmoneda()
        Dim tmp_obj As Object = Nothing
        If Not IsNothing(cbo_moneda.SelectedItem) Then
            tmp_obj = cbo_moneda.SelectedItem
        End If
        cbo_moneda.Properties.Items.Clear()

        Dim moneda_ As New cls_moneda_
        If moneda_.CargarTodos Then
            For Each moneda As cls_moneda_ In moneda_.Items
                cbo_moneda.Properties.Items.Add(moneda)
            Next
            cbo_moneda.SelectedIndex = 0
            cbo_moneda.Enabled = True

            If Not IsNothing(tmp_obj) Then
                For Each obj As cls_moneda_ In cbo_moneda.Properties.Items
                    If obj.idmoneda = tmp_obj.idmoneda Then
                        cbo_moneda.SelectedItem = obj
                        Exit For
                    End If
                Next
            End If
        Else
            cbo_moneda.Enabled = True
            cbo_moneda.SelectedItem = Nothing
        End If
    End Sub


    Private Sub Cargarunidaddetalle(ByRef prm_articulo As cls_articulo_)
        cbo_unidaddetalle.Properties.Items.Clear()
        If Not IsNothing(prm_articulo) Then
            For Each unidaddetalle As cls_unidaddetalle_ In prm_articulo.unidad.unidaddetalle_.Items
                cbo_unidaddetalle.Properties.Items.Add(unidaddetalle)
                If prm_articulo.idunidaddetalle = unidaddetalle.idunidaddetalle Then
                    cbo_unidaddetalle.SelectedItem = unidaddetalle
                End If
            Next
            cbo_unidaddetalle.Enabled = True
        Else
            cbo_unidaddetalle.Properties.Items.Add("Sin asignar")
            cbo_unidaddetalle.SelectedIndex = 0
            cbo_unidaddetalle.Enabled = False
        End If
    End Sub

    Public Shadows Sub Nuevo(ByRef listado As Form)
        Try
            frm_listado = listado
            Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - Nuevo"
            obj_documento = New cls_documento_
            btn_Registro.Enabled = False
            Me.Show()
        Catch ex As Exception
            'Dim frmError As New frm_ErrorManager(ex.Message)
        End Try
    End Sub

    Public Shadows Sub Modificar(ByRef documento As cls_documento_, ByRef listado As Form, ByRef row As DataRow)
        If IsNothing(obj_documento) Then
            obj_documento = New cls_documento_
        End If
        obj_documento = documento
        frm_listado = listado
        ulg_row = row : bbi_imprimir.Enabled = True

        Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - " & obj_documento.ToString
        txt_ID.Text = obj_documento.iddocumento
        cbo_tipo.SelectedIndex = obj_documento.tipo
        dtp_Fecha.DateTime = obj_documento.fecha
        txt_puntoventa.Text = obj_documento.puntoventa
        txt_numero.Text = obj_documento.numero

        txt_razonsocial.Text = obj_documento.razonsocial
        txt_direccion.Text = obj_documento.direccion

        If Not IsNothing(obj_documento.tercero) Then
            Dim tmp_proveedor As New cls_proveedor_
            tmp_proveedor.BuscarXidtercero(obj_documento.idtercero)
            txt_razonsocial.Tag = tmp_proveedor
            txt_razonsocial.Properties.ReadOnly = True
        End If

        For Each obj As cls_condicioniva_ In cbo_condicioniva.Properties.Items
            If obj.idcondicioniva = obj_documento.idcondicioniva Then
                cbo_condicioniva.SelectedItem = obj
                Exit For
            End If
        Next

        For Each obj As cls_moneda_ In cbo_moneda.Properties.Items
            If obj.idmoneda = obj_documento.idmoneda Then
                cbo_moneda.SelectedItem = obj
                Exit For
            End If
        Next
        txt_cotizacionvalor.Text = obj_documento.cotizacionvalor
        dtp_Fecha.DateTime = obj_documento.cotizacionfecha

        dtt_documentodetalle_.Clear()
        gdv_documentodetalle_.Tag.Clear()
        If Not IsNothing(obj_documento.documentodetalle_) Then
            If Not IsNothing(obj_documento.documentodetalle_.Items) Then
                For Each documentodetalle As cls_documentodetalle_ In obj_documento.documentodetalle_.Items
                    Dim Item As DataRow = dtt_documentodetalle_.NewRow
                    Item("Objeto") = documentodetalle
                    Item("idarticulo") = documentodetalle.idarticulo
                    Item("codigo") = documentodetalle.codigo
                    If documentodetalle.descripcion = "" Then
                        Item("nombre") = documentodetalle.nombre
                    Else
                        Item("nombre") = documentodetalle.nombre & vbNewLine & documentodetalle.descripcion
                    End If
                    If documentodetalle.idunidaddetalle = 0 Then
                        Item("unidad") = "Sin asignar."
                        Item("valor") = documentodetalle.valor
                        Item("cantidad") = documentodetalle.cantidad
                    Else
                        Item("unidad") = documentodetalle.unidaddetalle.ToString
                        Item("valor") = documentodetalle.unidaddetalle.CValCargar(documentodetalle.valor)
                        Item("cantidad") = documentodetalle.unidaddetalle.CCantCargar(documentodetalle.cantidad)
                    End If
                    Item("total") = documentodetalle.cantidad * documentodetalle.valor
                    'Item("cantidadMASK") = documentodetalle.cantidad
                    'Item("valorMASK") = documento.moneda.simbolo & " " & documentodetalle.valor
                    'Item("totalMASK") = documento.moneda.simbolo & " " & Item("total")
                    dtt_documentodetalle_.Rows.Add(Item)
                Next
            End If
        End If

        dtt_documentoalteracion_.Clear()
        btn_alteracion_.Tag.Clear()
        If Not IsNothing(obj_documento.documentoalteracion_) Then
            If Not IsNothing(obj_documento.documentoalteracion_.Items) Then
                For Each documentoalteracion As cls_documentoalteracion_ In obj_documento.documentoalteracion_.Items
                    Dim Item As DataRow = dtt_documentoalteracion_.NewRow
                    Item("Objeto") = documentoalteracion
                    Item("Nombre") = documentoalteracion.nombre
                    Item("Tipo") = documentoalteracion.tipo
                    Item("Formula") = documentoalteracion.formula
                    Item("Total") = 0
                    dtt_documentoalteracion_.Rows.Add(Item)
                Next
            End If
        End If

        txt_numerofiscal.Text = obj_documento.numerofiscal

        txt_Descuento.Text = Math.Round(obj_documento.descuento, int_cantdecimales)
        txt_DescuentoP.Text = Math.Round(obj_documento.descuentoP, int_cantdecimales)
        txt_Recargo.Text = Math.Round(obj_documento.recargo, int_cantdecimales)
        txt_RecargoP.Text = Math.Round(obj_documento.recargoP, int_cantdecimales)


        btn_Registro.Enabled = True

        obj_documento.moneda = Nothing
        obj_documento.tercero = Nothing
        obj_documento.documentodetalle_ = Nothing
        obj_documento.registro = Nothing

        Me.Show()

    End Sub

    Public Overrides Function ComprobarDatos() As Boolean
        If cbo_moneda.Enabled = False Then
            ErrManagerShow("001015", Me)
            Return False
        End If
        If Not cbo_condicioniva.Enabled Then
            ErrManagerShow("001007", Me)
            Return False
        End If
        If Not cbo_condicioniva.Enabled Then
            Return False
        End If
        If Not ControlarValidaciones() Then
            ErrManagerShow("000004", Me)
            Return False
        End If
        Return True
    End Function

    Public Shadows Sub btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Guardar.Click
        If ComprobarDatos() Then

            'obj_documento.tipodocumento = txt_documentotipo.Text
            obj_documento.tipo = cbo_tipo.SelectedIndex
            obj_documento.fecha = dtp_Fecha.DateTime
            obj_documento.puntoventa = txt_puntoventa.Text
            obj_documento.numero = txt_numero.Text

            obj_documento.razonsocial = txt_razonsocial.Text
            obj_documento.direccion = txt_direccion.Text
            If Not IsNothing(txt_razonsocial.Tag) Then
                obj_documento.idtercero = CType(txt_razonsocial.Tag, cls_proveedor_).idtercero
            Else
                obj_documento.idtercero = 0
            End If

            obj_documento.idcondicioniva = CType(cbo_condicioniva.SelectedItem, cls_condicioniva_).idcondicioniva

            obj_documento.idmoneda = CType(cbo_moneda.SelectedItem, cls_moneda_).idmoneda
            obj_documento.cotizacionfecha = dpt_cotizacionfecha.DateTime
            obj_documento.cotizacionvalor = txt_cotizacionvalor.Text

            obj_documento.numerofiscal = txt_numerofiscal.Text

            obj_documento.descuento = txt_Descuento.Text
            obj_documento.descuentoP = txt_DescuentoP.Text
            obj_documento.recargo = txt_Recargo.Text
            obj_documento.recargoP = txt_RecargoP.Text


            'Guardo documentodetalle------------------------------------------------------
            If IsNothing(obj_documento.documentodetalle_) Then
                obj_documento.documentodetalle_ = New cls_documentodetalle_
            End If
            If IsNothing(obj_documento.documentodetalle_.Items) Then
                obj_documento.documentodetalle_.Items = New Collections.Generic.List(Of cls_documentodetalle_)
            End If
            obj_documento.documentodetalle_.Items = New Collections.Generic.List(Of cls_documentodetalle_)
            For Each Elemento As DataRow In dtt_documentodetalle_.Rows
                CType(Elemento("Objeto"), cls_documentodetalle_).descuentoP = obj_documento.descuentoP
                CType(Elemento("Objeto"), cls_documentodetalle_).descuento = Math.Round((CType(Elemento("Objeto"), cls_documentodetalle_).descuentoP * CType(Elemento("Objeto"), cls_documentodetalle_).valor) / 100, int_cantdecimales)
                CType(Elemento("Objeto"), cls_documentodetalle_).recargoP = obj_documento.recargoP
                CType(Elemento("Objeto"), cls_documentodetalle_).recargo = Math.Round((CType(Elemento("Objeto"), cls_documentodetalle_).recargoP * CType(Elemento("Objeto"), cls_documentodetalle_).valor) / 100, int_cantdecimales)
                CType(Elemento("Objeto"), cls_documentodetalle_).alteracionP = Math.Round((CDec(txt_Otros.Text) * 100) / CDec(txt_totalsubtotal.Text), int_cantdecimales)
                CType(Elemento("Objeto"), cls_documentodetalle_).alteracion = Math.Round((CType(Elemento("Objeto"), cls_documentodetalle_).alteracionP * CType(Elemento("Objeto"), cls_documentodetalle_).valor) / 100, int_cantdecimales)
                CType(Elemento("Objeto"), cls_documentodetalle_).valorfinal = CType(Elemento("Objeto"), cls_documentodetalle_).valor - CType(Elemento("Objeto"), cls_documentodetalle_).descuento + CType(Elemento("Objeto"), cls_documentodetalle_).recargo + CType(Elemento("Objeto"), cls_documentodetalle_).alteracion
                obj_documento.documentodetalle_.Items.Add(Elemento("Objeto"))
            Next
            For Each Elemento As cls_documentodetalle_ In gdv_documentodetalle_.Tag
                If Elemento.iddocumentodetalle <> 0 Then
                    Elemento.Eliminar(Elemento.iddocumentodetalle)
                End If
            Next


            'CONTROLO LOS CAMBIOS DE PRECIOS DE ARTICULOS POR PROVEEDOR--------------------
            If obj_documento.idtercero <> 0 Then
                Dim temp_proveedor As New cls_proveedor_
                temp_proveedor.BuscarXidtercero(obj_documento.idtercero)
                Dim actualizar As Boolean = False
                For Each documentodetalle As cls_documentodetalle_ In obj_documento.documentodetalle_.Items
                    If documentodetalle.idarticulo <> 0 Then
                        If documentodetalle.valorfinal <> documentodetalle.articulo.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, temp_proveedor.idproveedor) Then
                            If ErrManagerShow("000012", Me) = Windows.Forms.DialogResult.Yes Then
                                actualizar = True
                                Exit For
                            End If
                        End If
                    End If
                Next
                If actualizar Then
                    For Each documentodetalle As cls_documentodetalle_ In obj_documento.documentodetalle_.Items
                        If documentodetalle.idarticulo <> 0 Then
                            If documentodetalle.valorfinal <> documentodetalle.articulo.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, temp_proveedor.idproveedor) Then
                                Dim temp_proveedorarticulo As New cls_proveedorarticulo_
                                temp_proveedorarticulo.idarticulo = documentodetalle.idarticulo
                                temp_proveedorarticulo.idproveedor = temp_proveedor.idproveedor
                                temp_proveedorarticulo.idunidaddetalle = documentodetalle.idunidaddetalle
                                temp_proveedorarticulo.valor = documentodetalle.valorfinal
                                temp_proveedorarticulo.fecha = obj_documento.fecha
                                temp_proveedorarticulo.idmoneda = obj_documento.idmoneda
                                temp_proveedorarticulo.Nuevo()
                            End If
                        End If
                    Next
                End If
            End If
            '---------------------------------------------------------------------

            'Guardo documentoalteracion------------------------------------------------------
            If IsNothing(obj_documento.documentoalteracion_) Then
                obj_documento.documentoalteracion_ = New cls_documentoalteracion_
            End If
            If IsNothing(obj_documento.documentoalteracion_.Items) Then
                obj_documento.documentoalteracion_.Items = New Collections.Generic.List(Of cls_documentoalteracion_)
            End If
            obj_documento.documentoalteracion_.Items = New Collections.Generic.List(Of cls_documentoalteracion_)
            For Each Elemento As DataRow In dtt_documentoalteracion_.Rows
                obj_documento.documentoalteracion_.Items.Add(Elemento("Objeto"))
            Next
            For Each Elemento As cls_documentoalteracion_ In btn_alteracion_.Tag
                If Elemento.iddocumentoalteracion <> 0 Then
                    Elemento.Eliminar(Elemento.iddocumentoalteracion)
                End If
            Next
            '---------------------------------------------------------------------

            'GUARDO COTIZACION NUEVA SI EXISTE------------------------------------
            If cbo_moneda.SelectedIndex <> 0 Then ' No es moneda local
                If Not IsNothing(btn_cotizacionultima.Tag) Then
                    If CType(btn_cotizacionultima.Tag, cls_cotizacion_).idcotizacion = 0 Then ' se modifico la cotizacion
                        CType(btn_cotizacionultima.Tag, cls_cotizacion_).Nuevo()
                    End If
                End If
            End If
            '---------------------------------------------------------------------


            If txt_ID.Text = "" Then
                obj_documento.Nuevo(True)
                If frm_listado.Visible Then
                    ulg_row = CType(frm_listado, xtf_LISTADOdocumento_).AgregarItem(obj_documento)
                End If
                Modificar(obj_documento, frm_listado, ulg_row)
            Else
                obj_documento.Modificar()
                If frm_listado.Visible Then
                    CType(frm_listado, xtf_LISTADOdocumento_).ModificarItem(obj_documento, ulg_row)
                End If
                Modificar(obj_documento, frm_listado, ulg_row)
            End If
            flg_Modificado = False : btn_Guardar.Enabled = False : bbi_guardar.Enabled = False
        End If
    End Sub

    Private Sub btn_Registro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Registro.Click
        If Not IsNothing(obj_documento.registro) Then
            Dim ABMRegistro As New xtf_ABMRegistro(obj_documento.registro)
            If ABMRegistro.ShowDialog() = Windows.Forms.DialogResult.OK Then
                flg_Modificado = True
            End If
        End If
    End Sub

    Private Sub btn_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Cerrar.Click
        If flg_Modificado Then
            bol_comprobarCerrado = False
            Select Case ErrManagerShow("000001", Me)
                Case Windows.Forms.DialogResult.Yes
                    If ComprobarDatos() Then
                        btn_Guardar_Click(Nothing, Nothing)
                    Else
                        Exit Sub
                    End If
                Case Windows.Forms.DialogResult.Cancel : bol_comprobarCerrado = True
                    Exit Sub
            End Select
        End If
        Me.Dispose()
    End Sub

    Private Sub tsb_documentodetalleAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_documentodetalleAgregar.Click
        Dim documentodetalle As New cls_documentodetalle_
        documentodetalle.codigo = txt_codigo.Text

        documentodetalle.nombre = txt_nombre.Text
        If NoVal_nombremultilinea.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always Then
            documentodetalle.descripcion = txt_descripcion.Text
        End If
        If Not IsNothing(txt_nombre.Tag) Then
            documentodetalle.idarticulo = CType(txt_nombre.Tag, cls_articulo_).idarticulo
        End If

        If cbo_unidaddetalle.SelectedItem.GetType.ToString = GetType(cls_unidaddetalle_).ToString Then
            documentodetalle.idunidaddetalle = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).idunidaddetalle
            documentodetalle.cantidad = documentodetalle.unidaddetalle.CCantGuardar(txt_cantidad.Text)
            documentodetalle.valor = documentodetalle.unidaddetalle.CValGuardar(txt_valor.Text)
        Else
            documentodetalle.cantidad = txt_cantidad.Text
            documentodetalle.idunidaddetalle = 0
            documentodetalle.valor = txt_valor.Text
        End If

        Dim Item As DataRow = dtt_documentodetalle_.NewRow
        Item("Objeto") = documentodetalle
        Item("idarticulo") = documentodetalle.idarticulo
        Item("codigo") = documentodetalle.codigo
        Item("nombre") = documentodetalle.nombre
        If NoVal_nombremultilinea.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always Then
            Item("nombre") &= vbNewLine & documentodetalle.descripcion
        End If
        If documentodetalle.idunidaddetalle = 0 Then
            Item("unidad") = "Sin asignar"
            Item("valor") = documentodetalle.valor
            Item("cantidad") = documentodetalle.cantidad
        Else
            Item("unidad") = documentodetalle.unidaddetalle.ToString
            Item("valor") = documentodetalle.unidaddetalle.CValCargar(documentodetalle.valor)
            Item("cantidad") = documentodetalle.unidaddetalle.CCantCargar(documentodetalle.cantidad)
        End If

        Item("total") = Item("cantidad") * Item("valor")
        'Item("cantidadMASK") = documentodetalle.cantidad
        'Item("valorMASK") = CType(cbo_moneda.SelectedItem, cls_moneda_).simbolo & " " & documentodetalle.valor
        'Item("totalMASK") = CType(cbo_moneda.SelectedItem, cls_moneda_).simbolo & " " & Item("total")
        dtt_documentodetalle_.Rows.Add(Item)

        txt_cantidad.Text = 1
        txt_codigo.Text = ""
        txt_nombre.Text = ""
        txt_nombre.Tag = Nothing
        txt_nombre.Properties.ReadOnly = False
        txt_descripcion.Text = ""
        txt_valor.Text = 0
        txt_total.Text = 0
        txt_cantidad.Focus()
        Cargarunidaddetalle(Nothing)
    End Sub

    Private Sub txt_razonsocial_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_razonsocial.ButtonClick
        Dim buscar As xtf_buscardor = Nothing
        Dim Objeto_ As New cls_proveedor_
        Objeto_.CargarTodos(True)

        buscar = New xtf_buscardor("Proveedores", Objeto_, {"codigo|Codigo", "razonsocial|Razon Social"})

        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim proveedor As cls_proveedor_ = buscar.obj_resultado
            txt_razonsocial.Text = buscar.obj_resultado.razonsocial
            txt_razonsocial.Tag = proveedor
            If Not IsNothing(proveedor.tercero.direccionprimario) Then
                txt_direccion.Text = proveedor.tercero.direccionprimario.ToString
            End If
            For Each obj As cls_condicioniva_ In cbo_condicioniva.Properties.Items
                If obj.idcondicioniva = proveedor.tercero.idcondicioniva Then
                    cbo_condicioniva.SelectedItem = obj
                    Exit For
                End If
            Next
            txt_razonsocial.Properties.ReadOnly = True
            txt_numerofiscal.Text = proveedor.tercero.numerofiscal
        End If
    End Sub

    Private Sub txt_nombre_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_nombre.ButtonClick
        tsb_ComposicionBuscarProveedor.PerformClick()
    End Sub

    Private Sub txt_nombre_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_nombre.KeyDown
        If e.KeyCode = Keys.F3 Then
            txt_nombre.PerformClick(txt_nombre.Properties.Buttons(0))
            Exit Sub
        End If

        If e.KeyCode <> Keys.Enter Then
            If Not IsNothing(txt_nombre.Tag) Then
                txt_nombre.Tag = Nothing
                Cargarunidaddetalle(Nothing)
            End If
            txt_nombre.Properties.ReadOnly = False
        End If
    End Sub

    Private Sub txt_nombre_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_nombre.KeyPress
        If e.KeyChar = Chr(13) Then
            txt_cantidad.Focus()
        Else
            If Not IsNothing(txt_nombre.Tag) Then
                txt_nombre.Tag = Nothing
                Cargarunidaddetalle(Nothing)
            End If
            txt_nombre.Properties.ReadOnly = False
        End If
    End Sub

    Private Sub txt_razonsocial_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_razonsocial.KeyDown
        If e.KeyCode = Keys.F3 Then
            txt_razonsocial.PerformClick(txt_razonsocial.Properties.Buttons(0))
            Exit Sub
        End If
        If Not IsNothing(txt_razonsocial.Tag) Then
            txt_razonsocial.Tag = Nothing
        End If
        txt_razonsocial.Properties.ReadOnly = False
    End Sub

    Private Sub txt_razonsocial_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_razonsocial.KeyPress
        If Not IsNothing(txt_razonsocial.Tag) Then
            txt_razonsocial.Tag = Nothing
        End If
            txt_razonsocial.Properties.ReadOnly = False
    End Sub

    Private Sub txt_cantidad_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_cantidad.EditValueChanged
        txt_total.Text = CDec(txt_cantidad.Text) * CDec(txt_valor.Text)
    End Sub

    Private Sub txt_valor_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_valor.EditValueChanged
        txt_total.Text = CDec(txt_cantidad.Text) * CDec(txt_valor.Text)
    End Sub

    Private Sub tsb_documentodetalleEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_documentodetalleEliminar.Click
        If gdv_documentodetalle_.SelectedRowsCount > 0 Then
            gdv_documentodetalle_.BeginDataUpdate()
            gdv_documentodetalle_.Tag.add(gdv_documentodetalle_.GetDataRow(gdv_documentodetalle_.GetSelectedRows(0))("Objeto"))
            dtt_documentodetalle_.Rows.Remove(gdv_documentodetalle_.GetDataRow(gdv_documentodetalle_.GetSelectedRows(0)))
            gdv_documentodetalle_.EndDataUpdate()
        End If
    End Sub

    Private Sub txt_valor_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_valor.KeyPress
        If e.KeyChar = Chr(13) Then
            tsb_documentodetalleAgregar.PerformClick()
        End If
    End Sub

    Private Sub txt_cantidad_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_cantidad.KeyPress
        If e.KeyChar = Chr(13) Then
            If cbo_unidaddetalle.Enabled Then
                cbo_unidaddetalle.Focus()
            Else
                txt_valor.Focus()
            End If
        End If
    End Sub

    Private Sub txt_codigo_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_codigo.KeyPress
        If e.KeyChar = Chr(13) Then
            txt_nombre.Focus()
        End If
    End Sub

    Private Sub gdv_general_RowCountChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gdv_documentodetalle_.RowCountChanged
        Dim subtotal As Decimal
        Dim neto As Decimal
        Dim IVA As Decimal

        For Each row As DataRow In dtt_documentodetalle_.Rows
            subtotal += row("total")
        Next

        neto = subtotal
        neto += txt_Recargo.Text
        neto -= txt_Descuento.Text

        txt_Otros.Text = 0
        For Each row As DataRow In dtt_documentoalteracion_.Rows
            Select Case row("Tipo")
                Case cls_alteracion_.enu_tipo.Valor
                    txt_Otros.Text += CDec(row("formula"))
                    row("Total") = row("formula")
                Case cls_alteracion_.enu_tipo.Porcentaje
                    txt_Otros.Text += Math.Round((row("formula") * subtotal) / 100, int_cantdecimales)
                    row("Total") = Math.Round((row("formula") * subtotal) / 100, int_cantdecimales)
                Case cls_alteracion_.enu_tipo.Formula
                    txt_Otros.Text += Math.Round(CType(row("objeto"), cls_documentoalteracion_).Resolver(subtotal), int_cantdecimales)
                    row("Total") = Math.Round(CType(row("objeto"), cls_documentoalteracion_).Resolver(subtotal), int_cantdecimales)
            End Select
        Next

        neto += txt_Otros.Text

        txt_totalsubtotal.Text = Math.Round(subtotal, int_cantdecimales)
        txt_TotalNeto.Text = Math.Round(neto, int_cantdecimales)

        If cbo_tipo.SelectedIndex = 0 Then
            IVA = neto * 0.21
        Else
            IVA = 0
        End If
        txt_totaliva.Text = Math.Round(IVA, int_cantdecimales)

        txt_totaltotal.Text = Math.Round(neto + IVA, int_cantdecimales)
    End Sub


    
    Private Sub chk_descrpcionmultilinea_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chk_descrpcionmultilinea.CheckedChanged
        If chk_descrpcionmultilinea.Checked Then
            NoVal_nombremultilinea.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
        Else
            NoVal_nombremultilinea.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
        End If
    End Sub

   
    Private Sub txt_Descuento_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Descuento.EditValueChanged
        If Not txt_totalsubtotal.Text = 0 Then
            txt_DescuentoP.Text = Math.Round((CDec(txt_Descuento.Text) * 100) / CDec(txt_totalsubtotal.Text), int_cantdecimales)
            gdv_general_RowCountChanged(Nothing, Nothing)
        End If
    End Sub

    Private Sub txt_DescuentoP_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_DescuentoP.EditValueChanged
        txt_Descuento.Text = Math.Round((CDec(txt_DescuentoP.Text) * CDec(txt_totalsubtotal.Text)) / 100, int_cantdecimales)
        gdv_general_RowCountChanged(Nothing, Nothing)
    End Sub

    Private Sub txt_Recargo_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_Recargo.EditValueChanged
        If Not txt_totalsubtotal.Text = 0 Then
            txt_RecargoP.Text = Math.Round((CDec(txt_Recargo.Text) * 100) / CDec(txt_totalsubtotal.Text), int_cantdecimales)
            gdv_general_RowCountChanged(Nothing, Nothing)
        End If
    End Sub

    Private Sub txt_RecargoP_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_RecargoP.EditValueChanged
        txt_Recargo.Text = Math.Round((CDec(txt_RecargoP.Text) * CDec(txt_totalsubtotal.Text)) / 100, int_cantdecimales)
        gdv_general_RowCountChanged(Nothing, Nothing)
    End Sub

    Private Sub btn_alteracion__Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_alteracion_.Click
        Dim ListadoAlteracion_ As New xtf_LISTADOdocumentoalteracion_(dtt_documentoalteracion_, btn_alteracion_.Tag, txt_totalsubtotal.Text)
        ListadoAlteracion_.ShowDialog()
        gdv_general_RowCountChanged(Nothing, Nothing)
    End Sub

    Private Sub txt_puntoventa_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_puntoventa.GotFocus
        txt_puntoventa.SelectAll()
    End Sub

    Private Sub txt_numero_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_numero.GotFocus
        txt_numero.SelectAll()
    End Sub

    Private Sub cbo_moneda_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_moneda.SelectedIndexChanged
        btn_cotizacionultima_Click(Nothing, Nothing)
    End Sub

    Private Sub btn_cotizacionultima_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cotizacionultima.Click
        If CType(cbo_moneda.SelectedItem, cls_moneda_).idmoneda <> 1 Then
            txt_cotizacionvalor.Text = CType(cbo_moneda.SelectedItem, cls_moneda_).ultimacotizacion.valor
            dpt_cotizacionfecha.DateTime = CType(cbo_moneda.SelectedItem, cls_moneda_).ultimacotizacion.fecha
            btn_cotizacionultima.Tag = CType(cbo_moneda.SelectedItem, cls_moneda_).ultimacotizacion
            txt_cotizacionvalor.Properties.ReadOnly = False
            dpt_cotizacionfecha.Properties.ReadOnly = False
        Else
            txt_cotizacionvalor.Properties.ReadOnly = True
            dpt_cotizacionfecha.Properties.ReadOnly = True
            txt_cotizacionvalor.Text = 1
            dpt_cotizacionfecha.DateTime = Now
        End If
    End Sub

    Private Sub dpt_cotizacionfecha_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dpt_cotizacionfecha.EditValueChanged
        If Not IsNothing(btn_cotizacionultima.Tag) Then
            If CType(btn_cotizacionultima.Tag, cls_cotizacion_).idcotizacion <> 0 Then
                btn_cotizacionultima.Tag = New cls_cotizacion_
            End If
            CType(btn_cotizacionultima.Tag, cls_cotizacion_).idmoneda = CType(cbo_moneda.SelectedItem, cls_moneda_).idmoneda
            CType(btn_cotizacionultima.Tag, cls_cotizacion_).fecha = dtp_Fecha.DateTime
            CType(btn_cotizacionultima.Tag, cls_cotizacion_).valor = txt_cotizacionvalor.Text
        End If

    End Sub

    Private Sub txt_cotizacionvalor_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_cotizacionvalor.EditValueChanged
        If Not IsNothing(btn_cotizacionultima.Tag) Then
            If CType(btn_cotizacionultima.Tag, cls_cotizacion_).idcotizacion <> 0 Then
                btn_cotizacionultima.Tag = New cls_cotizacion_
            End If
            CType(btn_cotizacionultima.Tag, cls_cotizacion_).idmoneda = CType(cbo_moneda.SelectedItem, cls_moneda_).idmoneda
            CType(btn_cotizacionultima.Tag, cls_cotizacion_).valor = txt_cotizacionvalor.Text
            CType(btn_cotizacionultima.Tag, cls_cotizacion_).fecha = dtp_Fecha.DateTime
        End If

    End Sub

    Private Sub tsb_ComposicionBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionBuscar.Click
        Dim buscar As xtf_buscardor = Nothing
        Dim Objeto_ As New cls_articulo_
        Objeto_.CargarTodos()

        buscar = New xtf_buscardor("Articulos", Objeto_, {"nombre|Articulo"})

        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Dim articulo As cls_articulo_ = buscar.obj_resultado
            txt_nombre.Tag = articulo
            txt_descripcion.Text = articulo.descripcion
            txt_codigo.Text = articulo.codigo
            txt_nombre.Text = articulo.nombre
            Cargarunidaddetalle(articulo)
            If Not IsNothing(txt_razonsocial.Tag) Then
                If cbo_moneda.SelectedIndex <> 0 Then
                    txt_valor.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(articulo.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, CType(txt_razonsocial.Tag, cls_proveedor_).idproveedor) / CType(btn_cotizacionultima.Tag, cls_cotizacion_).valor)
                Else
                    txt_valor.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(articulo.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, CType(txt_razonsocial.Tag, cls_proveedor_).idproveedor))
                End If
            End If
            txt_nombre.Properties.ReadOnly = True
            txt_cantidad.Focus()
        End If
    End Sub

    Private Sub cbo_unidaddetalle_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cbo_unidaddetalle.KeyPress
        If e.KeyChar = Chr(13) Then
            If txt_valor.Enabled Then
                txt_valor.Focus()
            Else
                txt_valor.Focus()
            End If
        End If
    End Sub

    Private Sub cbo_unidaddetalle_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_unidaddetalle.SelectedIndexChanged
        If Not IsNothing(txt_razonsocial.Tag) Then
            If Not IsNothing(txt_nombre.Tag) Then
                If cbo_moneda.SelectedIndex <> 0 Then
                    txt_valor.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(txt_nombre.Tag.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, CType(txt_razonsocial.Tag, cls_proveedor_).idproveedor) / CType(btn_cotizacionultima.Tag, cls_cotizacion_).valor)
                Else
                    txt_valor.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(txt_nombre.Tag.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, CType(txt_razonsocial.Tag, cls_proveedor_).idproveedor))
                End If
            End If
        End If
    End Sub

    Private Sub txt_nombre_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_nombre.EditValueChanged

    End Sub

    Private Sub tsb_ComposicionBuscarProveedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionBuscarProveedor.Click

        If Not IsNothing(txt_razonsocial.Tag) Then
            If Not IsNothing(CType(txt_razonsocial.Tag, cls_proveedor_).proveedorArticulo_) Then
                If Not IsNothing(CType(txt_razonsocial.Tag, cls_proveedor_).proveedorArticulo_.Items) Then
                    Dim buscar As xtf_buscardor = Nothing
                    Dim Objeto_ As New cls_proveedorarticulo_
                    Objeto_ = CType(txt_razonsocial.Tag, cls_proveedor_).proveedorArticulo_
                    buscar = New xtf_buscardor("Articulos", Objeto_, {"articulo|Articulo"})

                    If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
                        Dim articulo As cls_articulo_ = buscar.obj_resultado.articulo
                        txt_nombre.Tag = articulo
                        txt_descripcion.Text = articulo.descripcion
                        txt_codigo.Text = articulo.codigo
                        txt_nombre.Text = articulo.nombre
                        Cargarunidaddetalle(articulo)
                        If Not IsNothing(txt_razonsocial.Tag) Then
                            If cbo_moneda.SelectedIndex <> 0 Then
                                txt_valor.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(articulo.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, CType(txt_razonsocial.Tag, cls_proveedor_).idproveedor) / CType(btn_cotizacionultima.Tag, cls_cotizacion_).valor)
                            Else
                                txt_valor.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(articulo.costo(cls_articulocomposicionarticulo_.enu_segunvalor.proveedor, CType(txt_razonsocial.Tag, cls_proveedor_).idproveedor))
                            End If
                        End If
                        txt_nombre.Properties.ReadOnly = True
                        txt_cantidad.Focus()
                    End If
                End If
            End If
            
        End If

    End Sub

    Private Sub txt_razonsocial_EditValueChanged(sender As System.Object, e As System.EventArgs) Handles txt_razonsocial.EditValueChanged

    End Sub
End Class


